1. Field of the Invention
The present invention relates generally to computer software. More particularly, the present invention relates to methods and apparatus for performing software performance tuning.
2. Description of Related Art
Software engineers are often under significant time constraints during the generation of a software tool or product. However, even once the software has been generated, the software cannot yet be released or shipped. In fact, one of the most time consuming phases of the software generation process is often the software testing process.
The process of assessing and tuning the current level of performance of software is often referred to as “software performance tuning.” For instance, software performance tuning may be used to test a software application that is run on the underlying computer system or that is a part of the underlying system (e.g., operating system). The resulting data is then analyzed to ascertain the causes of undesirable performance characteristics, such as the speed with which the particular software application is executed.
Software performance tuning has been long considered an art more than a science. Primarily, it typically requires tremendous expertise of its practitioners to both diagnose performance issues and resolve them. Performance issues may be caused by poor software application implementation or algorithms. However, often, performance issues may be caused by idiosyncratic behavior due to hardware, operating environment (e.g., operating system), or even compilers. Accordingly, the mastery of such an art often requires significant breadth and depth of knowledge and experience.
Various monitoring tools are currently available for the purpose of assessing the software performance of a software application being executed. These monitoring tools often generate a significant amount of runtime data. This runtime data is then manually assessed in order to identify undesirable performance characteristics of the software. Software performance tuning has therefore traditionally been a time-consuming process.
Many operating systems are shipped to customers with built-in monitoring tools that are used to assess software performance issues of software being executed on these operating systems. However, since these monitoring tools are designed to run with a particular operating system and each vendor platform varies, a software developer is often unfamiliar with these monitoring tools. As a result, the software developer may have difficulty running the monitoring tool. In addition, the amount of data generated by these monitoring tools is often inappropriate for the purpose needed. For instance, a particular monitoring tool may produce an unnecessarily large amount of data, or an insufficient amount of data. Moreover, it is often difficult to understand the runtime or output data that is generated by these monitoring tools. Software tuning engineers are therefore often needed in order to gain expertise in executing these monitoring tools, as well as analyzing the data that is generated by these monitoring tools.
Another shortcoming of existing monitoring tools is the type and quality of the data that is generated by the monitoring tools. Specifically, often the data that is generated is absolute data (e.g., number of bits) rather than relative or derived data (e.g., number of bits per second). In other words, the data often requires further analysis in order to ascertain the performance (e.g., speed) of the software being tested. In addition, runtime data may be obtained in accordance with a variety of methods, and therefore the data that is generated is often inaccurate.
Existing software monitoring tools are often referred to as “profilers.” These software profiles generally collect runtime performance data during the execution of a particular software application, and then presents the runtime data. Exemplary profilers include the Collector and Analyzer bundled with SunONE Studio software, available from Sun Microsystems, Inc. located in Menlo Park, Calif., the Jprobe Java™ profiler available from Sitraka/Quest located in Irvine, Calif., and OptimizeIt available from Borland located in Scotts Valley, Calif. Through the use of such profilers, it is possible to ascertain those portions of the software functionality that consume the most system resources and/or time.
Some profilers currently available run similarly to many debugging tools. Specifically, it is possible to interactively step through software being executed. However, such a process is often time-consuming. The user then individually and manually identifies those portions of the software that are problematic. In addition, the user has limited control over the testing process. In fact, many software profilers are run in batch mode without enabling the user to control the software testing process. The user is then left to the tedious and time consuming process of analyzing the large amount of data generated. In addition, such profilers typically generate data in a specific manner. Due to the rigid requirements of conventional profilers, it is difficult to customize the software performance tuning process.
In view of the above, it would be desirable to simplify the performance tuning process. Moreover, it would be beneficial if the accuracy of the data generated during software performance tuning process could be improved.